# sqlite_table.py

import sqlite3
import os

def get_table_names(db_path):
    """
    连接到SQLite数据库并获取所有表的名称
    
    参数:
        db_path (str): 数据库文件的路径
    
    返回:
        list: 包含所有表名的列表
    """
    table_names = []
    
    # 检查数据库文件是否存在
    if not os.path.exists(db_path):
        print(f"错误：数据库文件不存在 - {db_path}")
        return table_names
    
    try:
        # 连接到SQLite数据库
        conn = sqlite3.connect(db_path)
        cursor = conn.cursor()
        
        # 查询sqlite_master表以获取所有表名
        # type='table' 表示只选择表，排除索引等其他对象
        cursor.execute("SELECT name FROM sqlite_master WHERE type='table' ORDER BY name;")
        
        # 获取所有结果
        rows = cursor.fetchall()
        
        # 提取表名
        table_names = [row[0] for row in rows]
        
        # 关闭连接
        cursor.close()
        conn.close()
        
    except sqlite3.Error as e:
        print(f"数据库错误：{e}")
    except Exception as e:
        print(f"发生错误：{e}")
    
    return table_names

def main():
    """主函数"""
    # 数据库文件路径
    db_path = "./data/data.db"
    
    print(f"正在检查数据库: {os.path.abspath(db_path)}")
    
    # 获取表名
    tables = get_table_names(db_path)
    
    if tables:
        print(f"\n找到 {len(tables)} 个表：")
        print("-" * 40)
        for i, table_name in enumerate(tables, 1):
            print(f"{i:2d}. {table_name}")
    else:
        print("\n未找到任何表。")
        print("可能的原因：")
        print("  - 数据库文件为空")
        print("  - 数据库文件损坏")
        print("  - 没有权限访问数据库")

if __name__ == "__main__":
    main()